/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package easy.core.bean;

import java.io.IOException;
import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author DanielPinheiro
 */
public class BaseBean implements Serializable{
    private static final long serialVersionUID = 1L;
    private String INVALIDO = " inválido!";

        private String geraMD5(String mensagem){
		if(mensagem != null){
			MessageDigest digest;
			try {
				digest = java.security.MessageDigest.getInstance("MD5");
				digest.update(mensagem.getBytes());
			    byte[] hash = digest.digest();
			   return new String(hash);
			} catch (NoSuchAlgorithmException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	private String geraMD5(byte[] mensagem){
		if(mensagem != null){
			MessageDigest digest;
			try {
				digest = java.security.MessageDigest.getInstance("MD5");
				digest.update(mensagem);
			    byte[] hash = digest.digest();
			   return new String(hash);
			} catch (NoSuchAlgorithmException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * Adiciona mensagem global de informação(FacesMessage.SEVERITY_INFO) no
	 * request
	 *
	 * @param msg mensagem
	 * @see MessagesUtil#addInfoMessage(String, String)
	 */
	public void addInfoMessage(String msg) {
		addInfoMessage(null, msg);
	}

	/**
	 * Adiciona mensagem de informação(FacesMessage.SEVERITY_INFO) no request
	 *
	 * @param clientId id do componente no cliente ou <code>null</code> para mensagens globais
	 * @param msg mensagem
	 */
	public void addInfoMessage(String clientId, String msg) {
		FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));
	}

	/**
	 * Adiciona mensagem global de erro(FacesMessage.SEVERITY_ERROR) no request
	 *
	 * @param msg mensagem
	 * @see MessagesUtil#addErrorMessage(String, String)
	 */
	public void addErrorMessage(String msg) {
        String message = msg + INVALIDO;
		addErrorMessage(null, message);
	}

	/**
	 * Adiciona mensagem de erro(FacesMessage.SEVERITY_WARN) no request
	 *
	 * @param clientId id do componente no cliente ou <code>null</code> para mensagens globais
	 * @param msg mensagem
	 */
	public void addErrorMessage(String clientId, String msg) {
		FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg));
	}

	/**
	 * Adiciona mensagem global de alerta(FacesMessage.SEVERITY_WARN) no request
	 *
	 * @param msg mensagem
	 * @see MessagesUtil#addErrorMessage(String, String)
	 */
	public void addWarnMessage(String msg) {
		addWarnMessage(null, msg);
	}

	/**
	 * Adiciona mensagem de alerta(FacesMessage.SEVERITY_ERROR) no request
	 *
	 * @param clientId id do componente no cliente ou <code>null</code> para mensagens globais
	 * @param msg mensagem
	 */
	public void addWarnMessage(String clientId, String msg) {
		FacesContext.getCurrentInstance().addMessage(clientId, new FacesMessage(FacesMessage.SEVERITY_WARN, msg, msg));
	}

	/**
	 *
	 * @return
	 */
	public HttpSession getSession(){
		return (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
	}

	/**
	 *
	 * @return
	 */
	public HttpServletRequest getRequest(){
		return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
	}

	public void redirecionar(String url){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect(url);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 *
	 * @return
	 */
	public HttpServletResponse getResponse(){
		return (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
	}

	/**
	 *
	 * @param paramName
	 * @return
	 */
	public String getRequestParameter(String paramName){
		return getRequest().getParameter(paramName);
	}

    public Object getBean( String beanName){

             Object bean = (Object)
                FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(beanName);
        return bean;
    }
}
